package es.ikex.modelo;

import es.ikex.beans.ClienteAdminBean;
import es.ikex.beans.ClienteBean;
//import es.ikex.beans.PedidoBean;
//import es.ikex.beans.LineaPedidoBean;
import es.ikex.dao.ClienteDAO;
import es.ikex.dao.LineaPedidosDao;
import es.ikex.dao.PedidosDao;
import es.ikex.dao.ProductosDAO;
import es.ikex.dao.ProveedoresDAO;
import es.ikex.dao.SliderDao;
import es.ikex.dao.UsuarioDAO;
import java.util.ArrayList;
//import es.ikex.dao.ProductoDAO;
//import es.ikex.dao.PedidoDAO;
//import es.ikex.dao.LineaPedidoDAO;
import java.util.Collection;
import java.util.Iterator;

import org.apache.commons.beanutils.PropertyUtilsBean;


public class ModelFacade {

	public static Cliente crearCliente(ClienteBean bean, boolean crear) {
		
		Cliente cliente = getCliente(bean);
		UsuarioDAO udao = new UsuarioDAO();
		ClienteDAO cdao = new ClienteDAO();
		
		if(crear){
			if(!udao.getUsuario(cliente.getUsuario())){
				udao.crearUsuario(cliente);
				int a= cdao.crearCliente(cliente);
				bean.setCodigo(a);
			}else{
				cliente = null;
			}
		} else {
			udao.actualizarUsuario(cliente);
			cdao.actualizarCliente(cliente);
		}
		return cliente;
	}
	
public static Cliente crearCliente(ClienteAdminBean bean, boolean crear) {
		
		Cliente cliente = getCliente(bean);
		UsuarioDAO udao = new UsuarioDAO();
		ClienteDAO cdao = new ClienteDAO();
		
		if(crear){
			
			udao.crearUsuario(cliente);
			int a= cdao.crearCliente(cliente);
			bean.setCodigo(a);
		} else {
			udao.actualizarUsuario(cliente);
			cdao.actualizarCliente(cliente);
		}
		return cliente;
	}

	public static Collection<Cliente> getCliente(String clausulaWhere){
		UsuarioDAO udao = new UsuarioDAO();
		Collection<Cliente> clientes = udao.leerUsuarioCliente(clausulaWhere);
		return clientes;
	}
	
	
	public static Collection<Producto> getTipoProducto(){
		ProductosDAO pdao = new ProductosDAO();
		Collection<Producto> productos = pdao.getTipoProductos();
		
		return productos;
	}
	
	public static Collection<Producto> getCategorias(){
		ProductosDAO pdao = new ProductosDAO();
		Collection<Producto> productos = pdao.getCategorias();
		
		return productos;
	}
	
	public static Collection<Producto> getColecciones(){
		ProductosDAO pdao = new ProductosDAO();
		Collection<Producto> productos = pdao.getColecciones();
		
		return productos;
	}
	
	public static Collection<Proveedor> getProveedores(){
		ProveedoresDAO pdao = new ProveedoresDAO();
		Collection<Proveedor> productos = pdao.getProveedores();
		
		return productos;
	}
	
	public static Collection<Producto> getProducto(String where){
		ProductosDAO pdao = new ProductosDAO();
		Collection<Producto> productos = pdao.getProductos(where);
		
		return productos;
	}
	
	public static Collection<Producto> getBusquedaProducto(String where){
		ProductosDAO pdao = new ProductosDAO();
		Collection<Producto> productos = pdao.getProductosBusqueda(where);
		
		return productos;
	}
	
	public static Collection<Pedidos> getPedidos(String codigo){
		PedidosDao npe = new PedidosDao();
		Collection<Pedidos> pedido = npe.getPedidos(codigo);
		return pedido;
	}
	
	public static Cliente getCliente(ClienteBean bean){
		Cliente cliente = new Cliente();
		try {
			PropertyUtilsBean pub = new PropertyUtilsBean();
			pub.copyProperties(cliente, bean);
		} catch(IllegalAccessException ex){
			ex.printStackTrace();
		} catch(java.lang.reflect.InvocationTargetException ex){
			System.out.println("Error al copiar datos");
			ex.printStackTrace();
		} catch(NoSuchMethodException ex){
			ex.printStackTrace();
		}
		return cliente;
	}
	
	public static Cliente getCliente(ClienteAdminBean bean){
		Cliente cliente = new Cliente();
		try {
			PropertyUtilsBean pub = new PropertyUtilsBean();
			pub.copyProperties(cliente, bean);
		} catch(IllegalAccessException ex){
			ex.printStackTrace();
		} catch(java.lang.reflect.InvocationTargetException ex){
			System.out.println("Error al copiar datos");
			ex.printStackTrace();
		} catch(NoSuchMethodException ex){
			ex.printStackTrace();
		}
		return cliente;
	}
	
	public static Collection<Producto> getMasVendidos(int numero){
		LineaPedidosDao pdao = new LineaPedidosDao();
		Collection<Producto> masVendidos = pdao.masVendidos(numero);
		return masVendidos;
	}
	
	public static Collection<Producto> getBusqueda(String categoria, String coleccion, String concepto){
		String where = "where codigo like '"+categoria+coleccion+"%'";
		if(concepto != null)
			where = where + "and concepto='" + concepto + "'";
		
		ProductosDAO pdao = new ProductosDAO();
		
		Collection<Producto> productos = pdao.getProductos(where);
		return productos;
	}
	
	public static Collection<Producto> getBusquedaDetallada(String codigo){

		ProductosDAO pdao = new ProductosDAO();
		
		Collection<Producto> productos = pdao.getProductos(" where codigo='"+codigo+"'");
		return productos;
	}

	public static Collection<Slider> getSlider(String where) {
		SliderDao sl = new SliderDao();
		Collection<Slider> slider = sl.getSlider(where);
		return slider;
	}
	
	public static Collection<Producto> getDescatalogados(){

		ProductosDAO pdao = new ProductosDAO();
		
		Collection<Producto> productos = pdao.getProductosDescatalogatos();
		return productos;
	}
	
	public static ArrayList<Factura> getFactura(String codigo){

		LineaPedidosDao ldao = new LineaPedidosDao();
		ArrayList<Factura> productos = ldao.getPedido(codigo);
		return productos;
	}
	
	public static Collection<Producto> getProductosFueraStock(){

		ProductosDAO pdao = new ProductosDAO();
		
		Collection<Producto> productos = pdao.mostrarFueraStock();
		return productos;
	}

	public static ArrayList<Cliente> getClienteFactura(String idPedido) {
		ClienteDAO cliente = new ClienteDAO();
		ArrayList<Cliente> clienteList = cliente.getCliente(idPedido);
		return clienteList;
	}
}
